﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ReplaceCsv.WallLogParser
{
    /// <summary>
    /// Wallログを解析するための、１ログあたりの情報を
    /// 格納するbeanクラス
    /// このbeanそのものには解析ロジックは実装していない
    /// WallLogAnalyzeLogicクラスで解析ロジックを実装する。
    /// beanから各データをフォーマット抽出する場合は
    /// WallLogFormatter　クラスを利用する
    /// </summary>
    class WallLogBean
    {
        /// <summary>
        /// アクセス日時
        /// </summary>
        private DateTime _accessDateTime;
        public DateTime accessDateTime
        {
            get { return this._accessDateTime; }
        }
        /// <summary>
        /// アクセス時のオリジナルページ名
        /// </summary>
        private string _originalPageName = "";
        /// <summary>
        /// 出力するページ名
        /// </summary>
        private string _pageName = "";
        public string pageName{
            get { return this._pageName;}
        }
        /// <summary>
        /// 滞在時間のカテゴリー
        /// </summary>
        private string _onTimeCategory = "";
        /// <summary>
        /// 滞在時間のカテゴリー
        /// </summary>
        public string timeCategory{
            get { return this._onTimeCategory ;}
            internal set { if(value != null) this._onTimeCategory = value ;}
        }
        /// <summary>
        /// 滞在時間0秒で初期化する
        /// </summary>
        private TimeSpan _onTime = TimeSpan.FromSeconds(0);
        /// <summary>
        /// 滞在時間
        /// </summary>
        public TimeSpan OnTime
        {
            get { return this._onTime; }
            internal set { if (value != null) this._onTime = value; }
        }
        /// <summary>
        /// 滞在時間（カテゴリー単位）のログに出力するかどうか
        /// </summary>
        private bool _isOutputedOntimeCategory = false;
        /// <summary>
        /// 滞在時間（カテゴリー単位）のログに出力するかどうか
        /// </summary>
        internal bool isOutputedOntimeCategory
        {
            get { return _isOutputedOntimeCategory; }
            set { if (value != null) this._isOutputedOntimeCategory = value; }
        }
        /// <summary>
        /// 平均滞在時間のログに出力するかどうか
        /// </summary>
        private bool _isOutputedAvg = false;
        /// <summary>
        /// 滞在時間（カテゴリー単位）のログに出力するかどうか
        /// </summary>
        internal bool isOutputedAvg
        {
            get { return _isOutputedAvg; }
            set { if (value != null) this._isOutputedAvg = value; }
        }

        /// <summary>
        /// デフォルトコンストラクタは隠ぺい
        /// </summary>
        private WallLogBean() { }

        internal WallLogBean(DateTime accessDateTime, string originalPageName, string pageName)
        {
            //本当はnullチェックをすべきだが、いったん何もしない
            this._accessDateTime = accessDateTime;
            this._originalPageName = originalPageName;
            this._pageName = pageName;
        }
    }
}
